/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package controleur;

import com.opensymphony.xwork2.ActionSupport;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import modele.Entreprise;
import modele.Etudie;
import modele.Inscrit;
import modele.NewHibernateUtil;
import modele.Offre;
import modele.Personne;
import modele.Profession;
import modele.Promotion;
import modele.Universite;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.SessionAware;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author Mélanie
 */
public class Lister extends ActionSupport implements SessionAware {

    private Map<String, Object> session;
    //private Map<String, Object> sessionDetail;
    private Session hibernateSession;
    Promotion promoUserConnecte;
    List<Entreprise> listeEntreprises;
    List<Etudie> listeAlumnis;
    List<Etudie> listeAlumnisParDiplome;
    List<Etudie> listeAlumnisParAnnee;
    List<Inscrit> listeInscritInactif;
    List<Personne> listePersonneInactif;
    List<Entreprise> listeEntrepriseInactif;
    List<Universite> listeUniversite;
    List<Promotion> listePromotionDetail;
    List<Profession> listeProfessionDetail;
    List<Promotion> listePromotion;
    Personne personne;
    Personne p;
    Inscrit inscrit;
    Entreprise entreprise;
    public List<Offre> listeOffre;
    private String id, diplome, annee, idPersonne;
    public String idOffre;
    public Offre detailOffre;

    /**
     * @return the idPersonne
     */
    public String getIdPersonne() {
        return idPersonne;
    }

    /**
     * @param idPersonne the idPersonne to set
     */
    public void setIdPersonne(String idPersonne) {
        this.idPersonne = idPersonne;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getDiplome() {
        return diplome;
    }

    public void setDiplome(String diplome) {
        this.diplome = diplome;
    }

    public String getAnnee() {
        return annee;
    }

    public void setAnnee(String annee) {
        this.annee = annee;
    }

    public Personne getPersonne() {
        return personne;
    }

    public void setPersonne(Personne personne) {
        this.personne = personne;
    }

    public Inscrit getInscrit() {
        return inscrit;
    }

    public void setInscrit(Inscrit inscrit) {
        this.inscrit = inscrit;
    }

    public Personne getP() {
        return p;
    }

    public void setP(Personne p) {
        this.p = p;
    }

    /**
     * @return the session
     */
    public Map<String, Object> getSession() {
        return session;
    }

    /**
     * @param session the session to set
     */
    public void setSession(Map<String, Object> session) {
        this.session = session;
    }

    /**
     * @return the hibernateSession
     */
    public Session getHibernateSession() {
        return hibernateSession;
    }

    /**
     * @param hibernateSession the hibernateSession to set
     */
    public void setHibernateSession(Session hibernateSession) {
        this.hibernateSession = hibernateSession;
    }

    public List<Etudie> getListeAlumnis() {
        return listeAlumnis;
    }

    public void setListeAlumnis(List<Etudie> listeAlumnis) {
        this.listeAlumnis = listeAlumnis;
    }

    public List<Promotion> getListePromotionDetail() {
        return listePromotionDetail;
    }

    public void setListePromotionDetail(List<Promotion> listePromotionDetail) {
        this.listePromotionDetail = listePromotionDetail;
    }

    public List<Profession> getListeProfessionDetail() {
        return listeProfessionDetail;
    }

    public void setListeProfessionDetail(List<Profession> listeProfessionDetail) {
        this.listeProfessionDetail = listeProfessionDetail;
    }

    public List<Etudie> getListeAlumnisParDiplome() {
        return listeAlumnisParDiplome;
    }

    public void setListeAlumnisParDiplome(List<Etudie> listeAlumnisParDiplome) {
        this.listeAlumnisParDiplome = listeAlumnisParDiplome;
    }

    public List<Etudie> getListeAlumnisParAnnee() {
        return listeAlumnisParAnnee;
    }

    public void setListeAlumnisParAnnee(List<Etudie> listeAlumnisParAnnee) {
        this.listeAlumnisParAnnee = listeAlumnisParAnnee;
    }

    public List<Entreprise> getListeEntreprises() {
        return listeEntreprises;
    }

    public void setListeEntreprises(List<Entreprise> listeEntreprises) {
        this.listeEntreprises = listeEntreprises;
    }

    public String listerAlumnis() throws Exception {

        hibernateSession = NewHibernateUtil.getSessionFactory().openSession();
        hibernateSession.beginTransaction();
        String rep = "From Etudie";
        Query query = hibernateSession.createQuery(rep);
        listeAlumnis = (List<Etudie>) query.list();
        hibernateSession.getTransaction().commit();
        return "success";
    }

    public String listerAlumnisOrderDiplome() throws Exception {
        hibernateSession = NewHibernateUtil.getSessionFactory().openSession();
        hibernateSession.beginTransaction();
        //String diplome = ServletActionContext.getRequest().getParameter("diplome");

        String rep = "From Etudie as etu Where etu.promotion.diplome ='" + diplome + "'";
        System.out.println(rep);
        Query query = hibernateSession.createQuery(rep);
        listeAlumnisParDiplome = (List<Etudie>) query.list();
        System.out.println(listeAlumnisParDiplome);
        hibernateSession.getTransaction().commit();
        return "success";
    }

    public String listerAlumnisOrderAnnee() throws Exception {
        hibernateSession = NewHibernateUtil.getSessionFactory().openSession();
        hibernateSession.beginTransaction();
        // String annee = ServletActionContext.getRequest().getParameter("annee");

        String rep = "From Etudie as etu Where etu.promotion.anneeFin ='" + annee + "'";

        Query query = hibernateSession.createQuery(rep);
        listeAlumnisParAnnee = (List<Etudie>) query.list();
        hibernateSession.getTransaction().commit();
        return "success";
    }

    public String listerDetailsAlumni() throws Exception {
        hibernateSession = NewHibernateUtil.getSessionFactory().openSession();
        hibernateSession.beginTransaction();
        // String idPersonne = ServletActionContext.getRequest().getParameter("idPersonne");
        //String idPers="2";
        String rep = "from Profession where idPersonne='" + getIdPersonne() + "'";
        Query query = hibernateSession.createQuery(rep);
        listeProfessionDetail = (List<Profession>) query.list();

        String rep2 = "select promo from Etudie as promo where idPersonne='" + getIdPersonne() + "'";
        Query query2 = hibernateSession.createQuery(rep2);
        listePromotionDetail = (List<Promotion>) query2.list();

        String rep3 = "From Personne Where idPersonne ='" + getIdPersonne() + "'";
        Query query3 = hibernateSession.createQuery(rep3);
        p = (Personne) query3.uniqueResult();

        String rep4 = "From Inscrit Where idInscrit='" + getIdPersonne() + "'";
        Query query4 = hibernateSession.createQuery(rep4);
        inscrit = (Inscrit) query4.uniqueResult();

        session.put("courrielInscritDetail", inscrit.getCourrielInscrit());
        session.put("idPersonneDetail", p.getIdPersonne());
        session.put("prenomDetail", p.getPrenomPersonne());
        session.put("nomDetail", p.getNomPersonne());
        session.put("sexeDetail", p.getSexePersonne());
        session.put("villeDetail", p.getVillePersonne());
        session.put("telephoneDetail", p.getTelPersonne());
        session.put("dateNaissanceDetail", p.getDateNaissancePersonne());

        hibernateSession.getTransaction().commit();
        return "success";
    }

    public String listerEntreprises() throws Exception {
        hibernateSession = NewHibernateUtil.getSessionFactory().openSession();
        hibernateSession.beginTransaction();
        // String actif = "actif";
        String rep = "From Entreprise as ent Where ent.inscrit.statut='actif'";
        Query query = hibernateSession.createQuery(rep);
        listeEntreprises = (List<Entreprise>) query.list();
        hibernateSession.getTransaction().commit();
        return "success";
    }

    public String listerUniversite() throws Exception {
        hibernateSession = NewHibernateUtil.getSessionFactory().openSession();
        hibernateSession.beginTransaction();
        listeUniversite = hibernateSession.createQuery("from Universite").list();
        session.put("listeUniversite", listeUniversite);

        listePromotion = hibernateSession.createQuery("from Promotion").list();
        List<String> listeDiplome = new ArrayList<String>();
        for (int i = 0; i < listePromotion.size(); i++) {
            if (!(listeDiplome.contains(listePromotion.get(i).getDiplome()))) {
                listeDiplome.add(listePromotion.get(i).getDiplome());
            }
        }
        session.put("listeDiplome", listeDiplome);
        return "ok";
    }

    public String listerDmdeInscriptionAlumni() throws Exception {

        hibernateSession = NewHibernateUtil.getSessionFactory().openSession();
        hibernateSession.beginTransaction();
        listeInscritInactif = hibernateSession.createQuery("from Inscrit where statut = 'inactif' ").list();
        listePersonneInactif = new ArrayList<Personne>();
        for (int i = 0; i < listeInscritInactif.size(); i++) {
            personne = (Personne) hibernateSession.createQuery("from Personne where idPersonne= " + listeInscritInactif.get(i).getIdInscrit()).uniqueResult();
            if (personne != null) {
                listePersonneInactif.add(personne);
            }
        }
        return "ok";
    }

    public String listeDmdeInscritptionEntreprise() throws Exception {
        hibernateSession = NewHibernateUtil.getSessionFactory().openSession();
        hibernateSession.beginTransaction();
        listeInscritInactif = hibernateSession.createQuery("from Inscrit where statut = 'inactif' ").list();
        listeEntrepriseInactif = new ArrayList<Entreprise>();
        for (int i = 0; i < listeInscritInactif.size(); i++) {
            entreprise = (Entreprise) hibernateSession.createQuery("from Entreprise where idEntreprise= " + listeInscritInactif.get(i).getIdInscrit()).uniqueResult();
            if (entreprise != null) {
                listeEntrepriseInactif.add(entreprise);
            }
        }
        return "ok";
    }

    public String validationAlumni() throws Exception {
        //String idPersonne = ServletActionContext.getRequest().getParameter("id");
        hibernateSession = NewHibernateUtil.getSessionFactory().openSession();
        hibernateSession.beginTransaction();
        hibernateSession.createQuery("Update Inscrit set statut = 'actif' where idInscrit= " + getIdPersonne()).executeUpdate();
        hibernateSession.getTransaction().commit();
        listeInscritInactif = hibernateSession.createQuery("from Inscrit where statut = 'inactif' ").list();
        listePersonneInactif = new ArrayList<Personne>();
        for (int i = 0; i < listeInscritInactif.size(); i++) {
            personne = (Personne) hibernateSession.createQuery("from Personne where idPersonne= " + listeInscritInactif.get(i).getIdInscrit()).uniqueResult();
            if (personne != null) {
                listePersonneInactif.add(personne);
            }
        }
        return "ok";
    }

    public String validationEntreprise() throws Exception {
        //String idEntreprise = ServletActionContext.getRequest().getParameter("id");
        hibernateSession = NewHibernateUtil.getSessionFactory().openSession();
        hibernateSession.beginTransaction();
        //dans la ligne suivante j'ai changé idEntreprise en id
        hibernateSession.createQuery("Update Inscrit set statut = 'actif' where idInscrit= " + id).executeUpdate();
        hibernateSession.getTransaction().commit();
        listeInscritInactif = hibernateSession.createQuery("from Inscrit where statut = 'inactif' ").list();
        listeEntrepriseInactif = new ArrayList<Entreprise>();
        for (int i = 0; i < listeInscritInactif.size(); i++) {
            entreprise = (Entreprise) hibernateSession.createQuery("from Entreprise where idEntreprise= " + listeInscritInactif.get(i).getIdInscrit()).uniqueResult();
            if (entreprise != null) {
                listeEntrepriseInactif.add(entreprise);
            }
        }
        return "ok";
    }

    public String listerOffre() throws Exception {
        hibernateSession = NewHibernateUtil.getSessionFactory().openSession();
        hibernateSession.beginTransaction();

        listeOffre = hibernateSession.createQuery("from Offre").list();
        session.put("listeOffre", listeOffre);
        return "ok";
    }

    public String listerDetailOffre() throws Exception {
        hibernateSession = NewHibernateUtil.getSessionFactory().openSession();
        hibernateSession.beginTransaction();
        detailOffre = (Offre) hibernateSession.createQuery("from Offre where idOffre = " + getIdOffre()).uniqueResult();
        session.put("detailOffre", detailOffre);
        return "ok";
    }

    /**
     * @return the listeInscritInactif
     */
    public List<Inscrit> getListeInscritInactif() {
        return listeInscritInactif;
    }

    /**
     * @param listeInscritInactif the listeInscritInactif to set
     */
    public void setListeInscritInactif(List<Inscrit> listeInscritInactif) {
        this.listeInscritInactif = listeInscritInactif;
    }

    /**
     * @return the listePersonneInactif
     */
    public List<Personne> getListePersonneInactif() {
        return listePersonneInactif;
    }

    /**
     * @param listePersonneInactif the listePersonneInactif to set
     */
    public void setListePersonneInactif(List<Personne> listePersonneInactif) {
        this.listePersonneInactif = listePersonneInactif;
    }

    /**
     * @return the listeEntrepriseInactif
     */
    public List<Entreprise> getListeEntrepriseInactif() {
        return listeEntrepriseInactif;
    }

    /**
     * @param listeEntrepriseInactif the listeEntrepriseInactif to set
     */
    public void setListeEntrepriseInactif(List<Entreprise> listeEntrepriseInactif) {
        this.listeEntrepriseInactif = listeEntrepriseInactif;
    }

    /**
     * @return the listeUniversite
     */
    public List<Universite> getListeUniversite() {
        return listeUniversite;
    }

    /**
     * @param listeUniversite the listeUniversite to set
     */
    public void setListeUniversite(List<Universite> listeUniversite) {
        this.listeUniversite = listeUniversite;
    }

    /**
     * @return the listePromotion
     */
    public List<Promotion> getListePromotion() {
        return listePromotion;
    }

    /**
     * @param listePromotion the listePromotion to set
     */
    public void setListePromotion(List<Promotion> listePromotion) {
        this.listePromotion = listePromotion;
    }

    /**
     * @return the listeOffre
     */
    public List<Offre> getListeOffre() {
        return listeOffre;
    }

    /**
     * @param listeOffre the listeOffre to set
     */
    public void setListeOffre(List<Offre> listeOffre) {
        this.listeOffre = listeOffre;
    }


    /**
     * @return the detailOffre
     */
    public Offre getDetailOffre() {
        return detailOffre;
    }

    /**
     * @param detailOffre the detailOffre to set
     */
    public void setDetailOffre(Offre detailOffre) {
        this.detailOffre = detailOffre;
    }

    /**
     * @return the idOffre
     */
    public String getIdOffre() {
        return idOffre;
    }

    /**
     * @param idOffre the idOffre to set
     */
    public void setIdOffre(String idOffre) {
        this.idOffre = idOffre;
    }
}
